//
//  HMUserAccountViewModel.swift
//  WeiBo
//
//  Created by Apple on 2017/5/31.
//  Copyright © 2017年 KY. All rights reserved.
//

import UIKit
//  封装用户的网络请求
class HMUserAccountViewModel: NSObject {

    //  单例的全局访问点
    static let sharedUserAccount: HMUserAccountViewModel = HMUserAccountViewModel()
    
    //  构造函数私有化
    private override init() {
        super.init()
        //  解档用户模型
        userAccount = HMUserAccount.loadUserAccount()
    }
    
    //  获取accessToken
    var accessToken: String? {
        //  获取accessToken
        if let token = userAccount?.access_token {
            //  如果token不为空，判断是否过期
            if userAccount?.expiresDate?.compare(Date()) == .orderedDescending {
                //  过期时间大于当前时间表示没有过期，返回可用的token
                return token
            } else {
                return nil
            }
            
        } else {
            //  返回nil
            return nil
        }
        
    }
    
    //  是否登录的标记
    var isLogin: Bool {
        return accessToken != nil
    }
    
    //  引用用户模型
    var userAccount: HMUserAccount?
    
    //  获取accessToken
    func requestAccessToken(code: String, callBack: @escaping (Bool)->()) {
        HMNetworTools.sharedTools.requestAccessToken(code: code) { (response, error) in
            if error != nil {
                print("网络请求异常: \(error!)")
                callBack(false)
                return
            }
            guard let dic = response as? [String: Any] else {
                print("返回的数据不是一个正确的字典格式")
                callBack(false)
                return
            }
            //  字典转模型
            let userAccount = HMUserAccount(dic: dic)
            //  请求用户信息
            self.requestUserInfo(userAccount: userAccount, callBack: callBack)
        }
    }
    
    //  获取用户信息
    fileprivate func requestUserInfo(userAccount: HMUserAccount, callBack: @escaping (Bool)->()) {
        HMNetworTools.sharedTools.requestUserInfo(accessToken: userAccount.access_token!, uid: userAccount.uid) { (response, error) in
            if error != nil {
                print("网络异常: \(error!)")
                callBack(false)
                return
            }
            guard let dic = response as? [String: Any] else {
                print("返回的数据不是一个正确的字典格式")
                callBack(false)
                return
            }
            userAccount.name = dic["name"] as? String
            userAccount.avatar_large = dic["avatar_large"] as? String
            
            //  归档用户数据
            userAccount.saveUserAccount()
            //  记录当前登录的用户模型
            self.userAccount = userAccount
            //  登录成功回调
            callBack(true)
        }
    }
    
}
